<!--
  ~ Hibernate, Relational Persistence for Idiomatic Java
  ~
  ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
  ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
  -->
<body>

<h2>Hibernate Core (native API) JavaDocs</h2>

In addition to  {@link org.hibernate.SessionFactory} and {@link org.hibernate.Session}, applications using the
Hibernate native API will often need to utilize the following interfaces:<ul>
    <li>{@link org.hibernate.cfg.Configuration}</li>
    <li>{@link org.hibernate.Hibernate}</li>
    <li>{@link org.hibernate.Transaction}</li>
    <li>{@link org.hibernate.Query}</li>
    <li>{@link org.hibernate.Criteria}</li>
    <li>{@link org.hibernate.criterion.Projection}</li>
    <li>{@link org.hibernate.criterion.Projections}</li>
    <li>{@link org.hibernate.criterion.Criterion}</li>
    <li>{@link org.hibernate.criterion.Restrictions}</li>
    <li>{@link org.hibernate.criterion.Order}</li>
    <li>{@link org.hibernate.criterion.Example}</li>
</ul>
These interfaces are fully intended to be exposed to application code.
<hr/>

<h3>Extensions</h3>
Hibernate defines a number of interfaces that are completely intended to be extendable by application programmers and/or
integrators.  Listed below is a (not necessarily exhaustive) list of the most commonly utilized extension points:<ul>
    <li>{@link org.hibernate.EntityNameResolver}</li>
    <li>{@link org.hibernate.Interceptor} / {@link org.hibernate.EmptyInterceptor}</li>
    <li>{@link org.hibernate.Transaction} / {@link org.hibernate.transaction.TransactionFactory}</li>
    <li>{@link org.hibernate.context.CurrentSessionContext}</li>
    <li>{@link org.hibernate.dialect.Dialect}</li>
    <li>{@link org.hibernate.dialect.resolver.DialectResolver}</li>
    <li>{@link org.hibernate.event event listener} interfaces</li>
    <li>{@link org.hibernate.id.IdentifierGenerator}</li>
    <li>{@link org.hibernate.tuple.entity.EntityTuplizer} / {@link org.hibernate.tuple.component.ComponentTuplizer}</li>
    <li>{@link org.hibernate.type.Type} / {@link org.hibernate.usertype}</li>
</ul>
Note that there is a large degree of crossover between the notion of extension points and that of an integration SPI (below).
<hr/>

<h3>Integration SPI</h3>
Hibernate provides a number of SPIs intended to integrate itself with various third party frameworks or application code to provide
additional capabilities.   The SPIs fall mainly into 2 categories:<ul>
    <li>Caching - {@link org.hibernate.cache.RegionFactory}</li>
    <li>JDBC Connection management - {@link org.hibernate.service.jdbc.connections.spi.ConnectionProvider}
</ul>
Certainly {@link org.hibernate.dialect.Dialect} could fit in here as well, though we chose to list it under extensions since application
developers tend to provide extended dialects rather frequently for various reasons.
<br/>
Another SPI that is not yet exposed but is planned for such is the <em>bytecode provider</em> SPI.  See {@link org.hibernate.bytecode}
for details.
<hr/>

Complete Hibernate documentation may be found online at <a href="http://docs.jboss.org/hibernate/">http://docs.jboss.org/hibernate/</a>.

</body>